# Dockerfile

# 1. 使用官方 Python 镜像作为基础镜像
# 选择一个具体的版本以保证环境一致性，例如 3.9 或 3.10
FROM python:3.10-slim

# 2. 设置环境变量
# 禁止 Python 生成 .pyc 文件
ENV PYTHONDONTWRITEBYTECODE=1  
# 强制 Python 输出直接发送到终端，方便查看日志
ENV PYTHONUNBUFFERED=1     
# 设置为生产环境
ENV APP_ENV=production      

# 3. 设置工作目录
WORKDIR /app

# 4. 配置pip使用国内镜像源 
 RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple \
     && pip config set global.trusted-host mirrors.aliyun.com

# 5. 安装依赖
# 首先只复制 requirements.txt 并安装，利用 Docker 的层缓存机制
# 只有当 requirements.txt 改变时，这一层才会重新构建
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt

# 6. 复制项目文件到工作目录
# 将 app 目录复制到容器的 /app/app
COPY ./app /app/app
# 复制入口文件
COPY ./start.py /app/
# 复制测试脚本
COPY ./test_parser.py /app/

# 7. 创建缓存目录并设置权限
RUN mkdir -p /app/cache && chmod 777 /app/cache

# 8. 暴露端口
# Flask 应用默认运行在 5000 端口 (或 .env 中指定的 PORT)
EXPOSE 5000

# 9. 定义健康检查
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
    CMD curl -f http://localhost:5000/api/info || exit 1

# 10. 定义容器启动时执行的命令
# 使用 Gunicorn 启动，4个工作进程，绑定到 0.0.0.0:5000
# 假设 Flask app 实例在 app/main.py 文件中的 app 变量
CMD ["gunicorn", "--workers", "4", "--bind", "0.0.0.0:5000", "app.main:app"] 